const GValue *value,
GParamSpec *pspec);
static void set_cell_bg_color (GtkCellRenderer *cell,
- GdkColor *color);
+ GdkRGBA *rgba);
/* Fallback GtkCellRenderer implementation to use remaining ->get_size() implementations */
static void gtk_cell_renderer_real_get_preferred_width (GtkCellRenderer *cell,
guint sensitive : 1;
guint editing : 1;
- GdkColor cell_background;
+ GdkRGBA cell_background;
};
PROP_IS_EXPANDED,
PROP_CELL_BACKGROUND,
PROP_CELL_BACKGROUND_GDK,
+ PROP_CELL_BACKGROUND_RGBA,
PROP_CELL_BACKGROUND_SET,
PROP_EDITING
};
P_("Cell background color as a GdkColor"),
GDK_TYPE_COLOR,
GTK_PARAM_READWRITE));
+ /**
+ * GtkCellRenderer:cell-background-rgba:
+ *
+ * Cell background as a #GdkRGBA
+ *
+ * Since: 3.0
+ */
+ g_object_class_install_property (object_class,
+ PROP_CELL_BACKGROUND_RGBA,
+ g_param_spec_boxed ("cell-background-rgba",
+ P_("Cell background RGBA color"),
+ P_("Cell background color as a GdkRGBA"),
+ GDK_TYPE_RGBA,
+ GTK_PARAM_READWRITE));
g_object_class_install_property (object_class,
PROP_EDITING,
{
GdkColor color;
- color.red = priv->cell_background.red;
- color.green = priv->cell_background.green;
- color.blue = priv->cell_background.blue;
+ color.red = (guint16) (priv->cell_background.red * 65535);
+ color.green = (guint16) (priv->cell_background.green * 65535);
+ color.blue = (guint16) (priv->cell_background.blue * 65535);
g_value_set_boxed (value, &color);
}
break;
+ case PROP_CELL_BACKGROUND_RGBA:
+ g_value_set_boxed (value, &priv->cell_background);
+ break;
case PROP_CELL_BACKGROUND_SET:
g_value_set_boolean (value, priv->cell_background_set);
break;
break;
case PROP_CELL_BACKGROUND:
{
- GdkColor color;
+ GdkRGBA rgba;
if (!g_value_get_string (value))
set_cell_bg_color (cell, NULL);
- else if (gdk_color_parse (g_value_get_string (value), &color))
- set_cell_bg_color (cell, &color);
+ else if (gdk_rgba_parse (g_value_get_string (value), &rgba))
+ set_cell_bg_color (cell, &rgba);
else
g_warning ("Don't know color `%s'", g_value_get_string (value));
}
break;
case PROP_CELL_BACKGROUND_GDK:
+ {
+ GdkColor *color;
+ GdkRGBA rgba;
+
+ color = g_value_get_boxed (value);
+ rgba.red = color->red / 65535.;
+ rgba.green = color->green / 65535.;
+ rgba.blue = color->blue / 65535.;
+ rgba.alpha = 1;
+
+ set_cell_bg_color (cell, &rgba);
+ }
+ break;
+ case PROP_CELL_BACKGROUND_RGBA:
set_cell_bg_color (cell, g_value_get_boxed (value));
break;
case PROP_CELL_BACKGROUND_SET:
static void
set_cell_bg_color (GtkCellRenderer *cell,
- GdkColor *color)
+ GdkRGBA *rgba)
{
GtkCellRendererPrivate *priv = cell->priv;
- if (color)
+ if (rgba)
{
if (!priv->cell_background_set)
{
g_object_notify (G_OBJECT (cell), "cell-background-set");
}
- priv->cell_background.red = color->red;
- priv->cell_background.green = color->green;
- priv->cell_background.blue = color->blue;
+ priv->cell_background = *rgba;
}
else
{
if (priv->cell_background_set && !selected)
{
gdk_cairo_rectangle (cr, background_area);
- gdk_cairo_set_source_color (cr, &priv->cell_background);
+ gdk_cairo_set_source_rgba (cr, &priv->cell_background);
cairo_fill (cr);
}